home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / biz / haage / WarpUP_V31.lha / WarpUP-WarpOS / include / powerpc / listsPPC.i next >
Text File  |  1998-03-06  |  3KB  |  123 lines

  1.         IFND POWERPC_LISTSPPC_I
  2. POWERPC_LISTSPPC_I      SET 1
  3. **
  4. **      $VER: ListsPPC.i 12.0 (1.8.97)
  5. **
  6. **      Structures related to WarpOS list handling
  7. **
  8.  
  9.         IFND    EXEC_LISTS_I
  10.         include exec/lists.i
  11.         ENDC
  12.  
  13.         IFND    EXEC_NODES_I
  14.         include exec/nodes.i
  15.         ENDC
  16.  
  17.         IFND    POWERPC/PPCMACROS_I
  18.         include powerpc/ppcmacros.i
  19.         ENDC
  20.  
  21. ;Prepare a list header for use
  22. _NEWLIST    MACRO   ; list
  23.         STW     \1,LH_TAILPRED(\1)
  24.         LI      R0,0
  25.         STWU    R0,LH_TAIL(\1) ;Clear LH_TAIL
  26.         STWU    \1,-4(\1)   ;Address of LH_TAIL to LH_HEAD
  27.         ENDM
  28.  
  29. ;Test if list is empty (list address in register)
  30. ;This operation is safe at any time - no list arbitration needed.
  31. _TSTLIST    MACRO   ; [list]
  32.         IFGT    NARG-1
  33.            FAIL    !!! TSTLIST - Too many arguments !!!
  34.         ENDC
  35.         LWZ     R0,LH_TAIL+LN_PRED(\1)
  36.         CMPW    R0,\1
  37.         ENDM
  38.  
  39. ;Get next in list
  40. _SUCC       MACRO   ; node,=succ
  41.         LWZ     \2,LN_SUCC(\1)
  42.         ENDM
  43.  
  44. ;Get previous in list
  45. _PRED       MACRO   ; node,=pred
  46.         LWZ     \2,LN_PRED(\1)
  47.         ENDM
  48.  
  49. ;If empty, branch
  50. _IFEMPTY    MACRO   ; list,label
  51.         LWZ     R0,LH_TAIL+LN_PRED(\1)
  52.         CMPW    R0,\1
  53.         BEQ     \2
  54.         ENDM
  55.  
  56. ;If not empty, branch
  57. _IFNOTEMPTY MACRO   ; list,label
  58.         LWZ     R0,LH_TAIL+LN_PRED(\1)
  59.         CMPW    R0,\1
  60.         BNE     \2
  61.         ENDM
  62.  
  63. ;Get next node, test if at end
  64. _TSTNODE    MACRO   ; node,=next
  65.         LWZ     \2,0(\1)
  66.         LWZ     R0,(\2)
  67.         MR.     R0,R0
  68.         ENDM
  69.  
  70. ;Add to head of list
  71. _ADDHEAD    MACRO   ; r4-list r5-node r3-(destroyed)
  72.         LWZ     r3,LH_HEAD(r4)
  73.         STW     r5,LH_HEAD(r4)
  74.         STW     r3,LN_SUCC(r5)
  75.         STW     r4,LN_PRED(r5)
  76.         STW     r5,LN_PRED(r3)
  77.         ENDM
  78.  
  79. ;Add to tail of list
  80. _ADDTAIL    MACRO   ; r4-list(destroyed) r5-node r3-(destroyed)
  81.         ADDI    r4,r4,LH_TAIL
  82.         LWZ     r3,LN_PRED(r4)
  83.         STW     r5,LN_PRED(r4)
  84.         STW     r4,LN_SUCC(r5)
  85.         STW     r3,LN_PRED(r5)
  86.         STW     r5,LN_SUCC(r3)
  87.         ENDM
  88.  
  89. ;Remove node from whatever list it is in
  90. _REMOVE     MACRO   ; r3-(destroyed) r4-node(destroyed)
  91.         LWZ     r3,LN_SUCC(r4)
  92.         LWZ     r4,LN_PRED(r4)
  93.         STW     r4,LN_PRED(r3)
  94.         STW     r3,LN_SUCC(r4)
  95.         ENDM
  96.  
  97. ;Remove node from head of list
  98. _REMHEAD    MACRO   ; r4-list r5-destroyed r3-(returned: node removed)
  99.         LWZ     r5,LH_HEAD(r4)
  100.         LWZ     r3,LN_SUCC(r5)
  101.         MR.     r3,r3
  102.         BEQ     .REMHEAD\@
  103.         STW     r3,LH_HEAD(r4)
  104.         STW     r4,LN_PRED(r3)
  105.         MR      r3,r5
  106. .REMHEAD\@
  107.         ENDM
  108.  
  109. ;Remove node from tail of list
  110. _REMTAIL    MACRO   ; r4-list r5-destroyed r3-(returned: node removed)
  111.         LWZ     r5,LH_TAIL+LN_PRED(r4)
  112.         LWZ     r3,LN_PRED(r5)
  113.         MR.     r3,r3
  114.         BEQ     .REMTAIL\@
  115.         STW     r3,LH_TAIL+LN_PRED(r4)
  116.         ADDI    r4,r4,LH_TAIL
  117.         STW     r4,LN_SUCC(r3)
  118.         MR      r3,r5
  119. .REMTAIL\@
  120.         ENDM
  121.  
  122.     ENDC    ;LISTSPPC_I
  123.